﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;//
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace MotoGame
{
    class Moto:Sprite
    {
        SoundEffect ronco;

        animacao andando;
        animacao correndo;
        animacao parado;
        animacao animacao_atual;

        public Vector2 colisao;

        int turbo;

        string nome;

        public Moto(ContentManager Content, GameWindow Window, string Textura)
            :base(Content.Load<Texture2D>(Textura))
        {
            this.Window = Window;

            nome = Textura;

            if (nome == "moto")
            {
                posicao = new Vector2(100, 300);
            }

            if (nome == "moto2")
            {
                posicao = new Vector2(600, 300);
                direita = false;
            }

            ronco = Content.Load<SoundEffect>("Sounds/SoundEffects/sound_effect");

            andando = new animacao();
            andando.quadro_X = 67;
            andando.quadro_Y = 47;
            andando.qtd_quadros = 3;
            andando.quadros_seg = 9;
            andando.Y = 0;

            correndo = new animacao();
            correndo.quadro_X = 67;
            correndo.quadro_Y = 47;
            correndo.qtd_quadros = 3;
            correndo.quadros_seg = 9;
            correndo.Y = 47;

            parado = new animacao();
            parado.quadro_X = 67;
            parado.quadro_Y = 47;
            parado.qtd_quadros = 3;
            parado.quadros_seg = 0;
            parado.Y = 0;

            animacao_atual = parado;

            colisao = posicao;

        }

        public override void Update(GameTime gameTime)
        {}

        public void Update(GameTime gameTime, KeyboardState teclado_atual)
        {
            if (nome == "moto2")
            {
                
                if (teclado_atual.IsKeyDown(Keys.RightShift))
                {

                    animacao_atual = correndo;
                    turbo = 10;

                }

                else
                {
                    turbo = 5;
                    animacao_atual = andando;
                }

                if (teclado_atual.IsKeyDown(Keys.Right))
                {
                    posicao.X += turbo;
                    direita = true;


                }
                if (teclado_atual.IsKeyDown(Keys.Left))
                {
                    posicao.X -= turbo;
                    direita = false;
                }
                if (teclado_atual.IsKeyDown(Keys.Up))
                {
                    posicao.Y -= turbo;
                }
                if (teclado_atual.IsKeyDown(Keys.Down))
                {
                    posicao.Y += turbo;
                }
           
            }

                
            if (nome == "moto")
            {

                if (teclado_atual.IsKeyDown(Keys.LeftShift))
                {

                    animacao_atual = correndo;
                    turbo = 10;

                }

                else
                {
                    turbo = 5;
                    animacao_atual = andando;
                }

                if (teclado_atual.IsKeyDown(Keys.D))
                {
                    posicao.X += turbo;
                    direita = true;
                }
                if (teclado_atual.IsKeyDown(Keys.A))
                {
                    posicao.X -= turbo;
                    direita = false;
                }
                if (teclado_atual.IsKeyDown(Keys.W))
                {
                    posicao.Y -= turbo;
                }
                if (teclado_atual.IsKeyDown(Keys.S))
                {
                    posicao.Y += turbo;
                }              
            }

            #region manter na tela

            if (posicao.X < 0)
            {
                posicao.X = 0;
            }
            if (posicao.X > Window.ClientBounds.Width - textura.Width/3)
            {
                posicao.X = Window.ClientBounds.Width - textura.Width/3;
            }

            if (posicao.Y < 0)
            {
                posicao.Y = 0;
            }

            if (posicao.Y > Window.ClientBounds.Height - textura.Height/2)
            {
                posicao.Y = Window.ClientBounds.Height - textura.Height/2;
            }
            #endregion
        }

        /*
          Namespaces, interfaces e membros de enumeração têm acesso implicitamente “public” e não pode ser modificado;
Tipos (incluindo classes) podem ser “public” ou “internal”, o padrão é “internal”, quase igual a public, visivel dentro do emsmo assembly;
Membros de classes podem ser de todos os tipos, o padrão é “private”;
Membros de estruturas podem ser “public”, “internal” ou “private”, o padrão é “private”;
         */
        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            base.Draw(gameTime, spriteBatch, animacao_atual);

            //spriteBatch.Draw(textura, new Rectangle((int)posicao.X, (int)posicao.Y, 67, 47), new Rectangle(0, 0, 67, 47), Color.White);
        }
    }
}
